let nums = [1, 3, -1, -3, 2, 3, 6, 7], k = 3

var maxSlidingWindow = function(nums, k) {
  const len = nums.length
  const res = []
  const queue = []  // 递减

  for (let i = 0; i < len; i++) {
    // 存入的值是不是维持递减趋势
    while (queue.length && nums[queue[queue.length - 1]] < nums[i]) {
      queue.pop()
    }

    queue.push(i)
    // 右进左出
    while (queue.length && queue[0] <= i - k) {
      queue.shift()
    }

    // 到了窗户宽度
    if (i >= k - 1) {
      res.push(nums[queue[0]])
    }
  }

  return res
};


// var maxSlidingWindow = function(nums, k) {
//   let i = 0, j = k - 1, res = []
//   while (j < nums.length) {
//     res.push(maxVal(nums, i, j))
//     i++
//     j++
//   }
//   return res
// };
// function maxVal(arr, l, r) {
//   let max = -Infinity
//   for (var i = l; i <= r; i++) {
//     if (arr[i] > max) {
//       max = arr[i]
//     }
//   }
//   return max
// }


// var maxSlidingWindow = function(nums, k) {
//   const res = []

//   for (let i = 0; i <= nums.length - k; i++) {
//     const arr = nums.slice(i, k + i)
//     const max = maxVal(arr) // Math.max(...arr)
//     res.push(max)
//   }
//   return res
  
// };

// function maxVal(arr) {  // [1, 2, 3]
//   let max = -Infinity
//   for (let i = 0; i < arr.length; i++) {
//     if (arr[i] > max) {
//       max = arr[i]
//     }
//   }
//   return max
// }

console.log(maxSlidingWindow(nums, k));